home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Your Choice 3
/
Your Choice Software Collection 3.iso
/
prgmming
/
flames
/
flame_mx.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-29
|
8KB
|
237 lines
//**************************************************************************
//* *
//* CFLAMES2 by Kirk A. Baum (Modex Version *FAST*) *
//* This C program was addapted from a pascal program by M.D.Mackey. *
//* It has been modified to half the resolution used by Mark and the *
//* routines are in C with inline assembly. The original code was *
//* written in Pascal with Inline assemby for mode 13h. *
//* As with Marks code, I release this code into the public domain. *
//* It may be freely distributed and modified, but please give credit*
//* where it is due if you use this code in your program. *
//* If you have any suggestions or comments please contact me at: *
//* kbaum@Novell.com. *
//* Mark can be reached at: mackey@aqueous.ml.csiro.au *
//* *
//**************************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
void setmodex(void);
void setpalette(void);
int p1[56][80];
unsigned int i,j,k,l;
int delta;
char ch;
unsigned char pal[768]={ 0, 0, 0, 0, 0, 24, 0, 0, 24, 0, 0, 28,
0, 0, 32, 0, 0, 32, 0, 0, 36, 0, 0, 40,
8, 0, 40, 16, 0, 36, 24, 0, 36, 32, 0, 32,
40, 0, 28, 48, 0, 28, 56, 0, 24, 64, 0, 20,
72, 0, 20, 80, 0, 16, 88, 0, 16, 96, 0, 12,
104, 0, 8,112, 0, 8,120, 0, 4,128, 0, 0,
128, 0, 0,132, 0, 0,136, 0, 0,140, 0, 0,
144, 0, 0,144, 0, 0,148, 0, 0,152, 0, 0,
156, 0, 0,160, 0, 0,160, 0, 0,164, 0, 0,
168, 0, 0,172, 0, 0,176, 0, 0,180, 0, 0,
184, 4, 0,188, 4, 0,192, 8, 0,196, 8, 0,
200, 12, 0,204, 12, 0,208, 16, 0,212, 16, 0,
216, 20, 0,220, 20, 0,224, 24, 0,228, 24, 0,
232, 28, 0,236, 28, 0,240, 32, 0,244, 32, 0,
252, 36, 0,252, 36, 0,252, 40, 0,252, 40, 0,
252, 44, 0,252, 44, 0,252, 48, 0,252, 48, 0,
252, 52, 0,252, 52, 0,252, 56, 0,252, 56, 0,
252, 60, 0,252, 60, 0,252, 64, 0,252, 64, 0,
252, 68, 0,252, 68, 0,252, 72, 0,252, 72, 0,
252, 76, 0,252, 76, 0,252, 80, 0,252, 80, 0,
252, 84, 0,252, 84, 0,252, 88, 0,252, 88, 0,
252, 92, 0,252, 96, 0,252, 96, 0,252,100, 0,
252,100, 0,252,104, 0,252,104, 0,252,108, 0,
252,108, 0,252,112, 0,252,112, 0,252,116, 0,
252,116, 0,252,120, 0,252,120, 0,252,124, 0,
252,124, 0,252,128, 0,252,128, 0,252,132, 0,
252,132, 0,252,136, 0,252, 136, 0,252, 140, 0,
252, 140, 0,252, 144, 0,252, 144, 0,252, 148, 0,
252, 152, 0,252, 152, 0,252, 156, 0,252, 156, 0,
252, 160, 0,252, 160, 0,252, 164, 0,252, 164, 0,
252, 168, 0,252, 168, 0,252, 172, 0,252, 172, 0,
252, 176, 0,252, 176, 0,252, 180, 0,252, 180, 0,
252, 184, 0,252, 184, 0,252, 188, 0,252, 188, 0,
252, 192, 0,252, 192, 0,252, 196, 0,252, 196, 0,
252, 200, 0,252, 200, 0,252, 204, 0,252, 208, 0,
252, 208, 0,252, 208, 0,252, 208, 0,252, 208, 0,
252, 212, 0,252, 212, 0,252, 212, 0,252, 212, 0,
252, 216, 0,252, 216, 0,252, 216, 0,252, 216, 0,
252, 216, 0,252, 220, 0,252, 220, 0,252, 220, 0,
252, 220, 0,252, 224, 0,252, 224, 0,252, 224, 0,
252, 224, 0,252, 228, 0,252, 228, 0,252, 228, 0,
252, 228, 0,252, 228, 0,252, 232, 0,252, 232, 0,
252, 232, 0,252, 232, 0,252, 236, 0,252, 236, 0,
252, 236, 0,252, 236, 0,252, 240, 0,252, 240, 0,
252, 240, 0,252, 240, 0,252, 240, 0,252, 244, 0,
252, 244, 0,252, 244, 0,252, 244, 0,252, 248, 0,
252, 248, 0,252, 248, 0,252, 248, 0,252, 252, 0,
252, 252, 4,252, 252, 8,252, 252, 12,252, 252, 16,
252, 252, 20,252, 252, 24,252, 252, 28,252, 252, 32,
252, 252, 36,252, 252, 40,252, 252, 40,252, 252, 44,
252, 252, 48,252, 252, 52,252, 252, 56,252, 252, 60,
252, 252, 64,252, 252, 68,252, 252, 72,252, 252, 76,
252, 252, 80,252, 252, 84,252, 252, 84,252, 252, 88,
252, 252, 92,252, 252, 96,252, 252, 100,252, 252, 104,
252, 252, 108,252, 252, 112,252, 252, 116,252, 252, 120,
252, 252, 124,252, 252, 124,252, 252, 128,252, 252, 132,
252, 252, 136,252, 252, 140,252, 252, 144,252, 252, 148,
252, 252, 152,252, 252, 156,252, 252, 160,252, 252, 164,
252, 252, 168,252, 252, 168,252, 252, 172,252, 252, 176,
252, 252, 180,252, 252, 184,252, 252, 188,252, 252, 192,
252, 252, 196,252, 252, 200,252, 252, 204,252, 252, 208,
252, 252, 208,252, 252, 212,252, 252, 216,252, 252, 220,
252, 252, 224,252, 252, 228,252, 252, 232,252, 252, 236,
252, 252, 240,252, 252, 244,252, 252, 248,252, 252, 252};
//************************************************************************
//*************************************************************************
void setmodex()
{
asm CLD
asm MOV AX,13h
asm INT 10h
asm CLI
asm MOV DX,3c4h
asm MOV AX,604h;// ; "Unchain my heart". And my VGA...
asm OUT DX,AX
asm MOV AX,0F02h;// ; All planes
asm OUT DX,AX
asm MOV DX,3D4h
asm MOV AX,14h;// ; Disable dword mode
asm OUT DX,AX
asm MOV AX,0E317h;// ; Enable byte mode.
asm OUT DX,AX
asm MOV AL,9
asm OUT DX,AL
asm INC DX
asm IN AL,DX
asm AND AL,0E0h;// ; Duplicate each scan 8 times.
asm ADD AL,7
asm OUT DX,AL
}
//*************************************************************************
//*************************************************************************
void setpalette()
{
int i;
for(i=0;i<768;i++)
{
pal[i] = pal[i] >> 2;
}
_SI = (unsigned int)&pal[0];
asm mov cx,768
asm mov dx,0x03c8
asm xor al,al
asm out dx,al
asm inc dx
l1:
asm outsb
asm dec cx
asm jnz l1
}
//*************************************************************************
//*************************************************************************
void main()
{
setmodex();
setpalette();
randomize();
ch=' ';
// Initialize the screen buffer
for(i=0;i<56;i++)
{
for(j=0;j<80;j++)
{
p1[i][j]=0;
}
}
// Loop until the escape key has been pressed
while(ch != 27)
{
// transform the current buffer
asm mov cx,4399;
_DI = (unsigned int)&p1[0][0];
asm xor ax,ax
asm add di,160
D1:
asm mov ax,ds:[di-2]
asm add ax,ds:[di]
asm add ax,ds:[di+2]
asm add ax,ds:[di+160]
asm shr ax,2
asm jz D2
asm sub ax,1
asm jz D2
asm sub ax,1
asm jz D2
asm sub ax,1
D2:
asm mov word ptr ds:[di-160],ax
asm add di,2
asm dec cx
asm jnz D1;
// Set new bottom line with random white or black color
delta = 0;
for(j=0;j<80;j++) // {set new bottom line}
{
if(random(10) < 5)
{
delta=random(2)*255;
}
p1[54][j]=delta;
p1[55][j]=delta;
}
// Write buffer to the screen
_SI = (unsigned int)&p1[0][0];
asm mov di,0
asm mov ax,0A000h
asm mov es,ax
asm mov cx,40*50
F1:
asm mov ax,ds:[si]
asm add si,2
asm mov dl,al
asm mov ax,ds:[si]
asm add si,2
asm mov dh,al
asm mov es:[di],dx
asm add di,2
asm dec cx
asm jnz F1
if(kbhit())
{
ch=getch();
}
}
// Restore the screen to text mode
asm mov ax,03h
asm int 10h
}